import React from 'react'
import { Redirect } from 'react-router-dom'
/**
 * Class constructor  cannot be invoked without 'new'
 * 使用装饰器后想要传多参数,必须在Hoc使用函数柯里化
 * 返回的组件必须作为最后一个参数
 * 第一个参数可传各种数据结构
 * 。。。。。。。。。。。。
 * 注意: 不写柯里化写成'@Hoc()',必定会报上述错误
 *       写了柯里化后,写括号不写参数则表示传过来一个undefined; 有参数则传来一个参数
 * 。。。。。。。。。。。。
 * 使用装饰器后 必须在最下面导出组件
 * 。。。。。。。。。。。。
 * 使用装饰器vsCode会报错,设置vsCode可解决: experimentalDecorators设置为true
 * 网址：https://www.jianshu.com/p/4c2bc81b75f0
 * 。。。。。。。。。。。。
 */

const JudgeLogin = (BackComponent) => {
  // 其实props传递给我(return的class组件)了,我要继续往下面传递给返回的组件--即属性代理
  return class extends BackComponent {
    render() {
      // sessionStorage.setItem('page', this.props.location.pathname)
      return sessionStorage.getItem('bloger') ? super.render() : <Redirect to="/login" />
      // 扩展运算符传递所有props,经过hoc返回的组件才能够进行父子属性传值
    }
  }
}// 没登录则这个组件无法访问
// 可省略高阶组件的名字Hoc直接导出; 也可省略return的类组件的名字Test(直接retur和导出)

export default JudgeLogin
